/*
 * @Date: 2023-01-22 02:17:37
 * @LastEditors: 恶名扬 2080156129@qq.com
 * @LastEditTime: 2023-01-24 05:24:15
 * @FilePath: \campus-repair-platform\server\service\common\user.js
 */
/**
 * getCode  获取手机验证码
 * updatePwdPhone 修改密码（根据手机号）
 * userStatement  判断用户类型
 */

// 导入密码加密
const bcrypt = require("bcryptjs")
const verify_code = require("../../common/verify_code")

exports.getCode = async (res, data) => {
  try {
    const sqlStr = userStatement(data.type).selectPhone(data.phone)
    // 操作数据库判断手机号是否已存在
    let results = await RunSQL(sqlStr)
    if (!results.length) return res.successSend("手机号不存在！", 10005) // 执行语句成功，但影响函数不等于 1

    // 发送短信验证码
    verify_code.send(results[0].phone).then(
      (result) => res.successSend("短信发送成功！") // 发送成功
      , (ex) => res.errSend(ex)
    )
  } catch (error) {
    res.errSend(error) // 返回错误信息
  }
}


exports.updatePwdPhone = async (res, data) => {
  try {
    // 验证验证码
    const valid = await verify_code.verify(data.phone, data.code)
    if (valid === '验证码过期') res.errSend("验证码过期", 10010)
    if (valid === '验证通过！') {
      password = bcrypt.hashSync(data.password, 10) // 调用 bcryptjs.hashSync() 对密码进行加密
      const sqlStr = userStatement(data.type).phoneUpdatePwd(
        password,
        data.phone
      )

      // 操作数据库修改密码
      let results = await RunSQL(sqlStr)
      if (results.affectedRows !== 1) return res.successSend("修改密码失败！", 10005) // 执行语句成功，但影响函数不等于 1
      
      return res.successSend("修改密码成功！") // 修改成功
    } else res.errSend(valid)
  } catch (error) {
    res.errSend(error) // 返回错误信息
  }
}

const userStatement = (type) => {
  switch (type) {
    case 1:
      return require("../../common/sql_sentences/student")
    case 2:
      return require("../../common/sql_sentences/repairer")
    case 3:
    case 4:
      return require("../../common/sql_sentences/administrator")
    default:
      "身份认证失败！"
  }
}

exports.userStatement = userStatement
